--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/pyogg/vorbis_file_stream.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 3.23 KB
Tff7b72import T7ee787ctypes
Tff7b72from T7ee787. Tff7b72import Te6edf3vorbis
Tff7b72from T7ee787.T7ee787pyogg_error Tff7b72import Te6edf3PyOggError
Tff7b72class T56d364VorbisFileStreamTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3buffer_sizeTff7b72=T79c0ff8192Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffexists Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_buffer_size Tff7b72= Te6edf3buffer_size
Tff7b72selfTff7b72.Td2a8ffvf Tff7b72= Te6edf3vorbisTff7b72.Td2a8ffOggVorbis_FileTb4b4b4(Tb4b4b4)
Te6edf3error Tff7b72= Te6edf3vorbisTff7b72.Td2a8ffov_fopenTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvfTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72raise Te6edf3PyOggErrorTb4b4b4(Ta5d6ff"Ta5d6fffile couldnTa5d6ff'Ta5d6fft be opened or doesnTa5d6ff'Ta5d6fft exist. Error code : Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3errorTb4b4b4)Tb4b4b4)
Te6edf3info Tff7b72= Te6edf3vorbisTff7b72.Td2a8ffov_infoTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvfTb4b4b4)Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)
T8b949e#: Number of channels in audio file.
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Te6edf3infoTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffchannels
T8b949e#: Number of samples per second (per channel). Always
T8b949e# 48,000.
Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72= Te6edf3infoTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffrate
Te6edf3array Tff7b72= Tb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffc_charTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_buffer_sizeTff7b72*Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4)Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuffer_ Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffpointerTb4b4b4(Te6edf3arrayTb4b4b4)Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_char_pTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbitstream Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffc_intTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbitstream_pointer Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffpointerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbitstreamTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexists Tff7b72= Tff7b72True T8b949e# TODO: is this the best place for this statement?
T8b949e#: Bytes per sample
Tff7b72selfTff7b72.Td2a8ffbytes_per_sample Tff7b72= T79c0ff2 T8b949e# TODO: Where is this defined?
Tff7b72def Tff7b72__del__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffexistsTb4b4b4:
Te6edf3vorbisTff7b72.Td2a8ffov_clearTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvfTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexists Tff7b72= Tff7b72False
Tff7b72def Td2a8ffclean_upTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3vorbisTff7b72.Td2a8ffov_clearTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvfTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexists Tff7b72= Tff7b72False
Tff7b72def Td2a8ffget_bufferTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""get_buffer() -> bytesBuffer, bufferLength
Returns None when all data has been read from the file.
"""
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffexistsTb4b4b4:
Tff7b72return Tff7b72None
Te6edf3buffer Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3total_bytes_written Tff7b72= T79c0ff0
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3new_bytes Tff7b72= Te6edf3vorbisTff7b72.Td2a8ffov_readTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvfTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffbuffer_Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_buffer_sizeTff7b72*Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72- Te6edf3total_bytes_writtenTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffbitstream_pointerTb4b4b4)
Te6edf3array_ Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuffer_Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffc_charTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_buffer_sizeTff7b72*Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffcontents
Te6edf3bufferTff7b72.Td2a8ffappendTb4b4b4(Te6edf3array_Tff7b72.Td2a8ffrawTb4b4b4[Tb4b4b4:Te6edf3new_bytesTb4b4b4]Tb4b4b4)
Te6edf3total_bytes_written Tff7b72+Tff7b72= Te6edf3new_bytes
Tff7b72if Te6edf3new_bytes Tff7b72== T79c0ff0 Tff7b72or Te6edf3total_bytes_written Tff7b72>Tff7b72= Tff7b72selfTff7b72.Td2a8ff_buffer_sizeTff7b72*Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4:
Tff7b72break
Te6edf3out_buffer Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3bufferTb4b4b4)
Tff7b72if Te6edf3total_bytes_written Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclean_upTb4b4b4(Tb4b4b4)
Tff7b72returnTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72return Te6edf3out_buffer
Tff7b72def Td2a8ffget_buffer_as_arrayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Provides the buffer as a NumPy array.
Note that the underlying data type is 16-bit signed
integers.
Does not copy the underlying data, so the returned array
should either be processed or copied before the next call
to get_buffer() or get_buffer_as_array().
"""
Tff7b72import T7ee787numpy T8b949e# type: ignore
T8b949e# Read the next samples from the stream
Te6edf3buf Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_bufferTb4b4b4(Tb4b4b4)
T8b949e# Check if we've come to the end of the stream
Tff7b72if Te6edf3buf Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
T8b949e# Convert the bytes buffer to a NumPy array
Te6edf3array Tff7b72= Te6edf3numpyTff7b72.Td2a8fffrombufferTb4b4b4(
Te6edf3bufTb4b4b4,
Te6edf3dtypeTff7b72=Te6edf3numpyTff7b72.Td2a8ffint16
Tb4b4b4)
T8b949e# Reshape the array
Tff7b72return Te6edf3arrayTff7b72.Td2a8ffreshapeTb4b4b4(
Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3bufTb4b4b4)
Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ffbytes_per_sample
Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)
Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────